From: Claudio Cambra Date: Mon, 10 Feb 2025 03:57:21 +0000 (+0800) Subject: shell_integration/macOS/FileProviderUIExt: Check locking is available on the server... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~2^2~77^2 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=a437901858a5750e401d6e5de7387f4383fd13e9;p=nextcloud-desktop.git shell_integration/macOS/FileProviderUIExt: Check locking is available on the server before attempting Signed-off-by: Claudio Cambra --- diff --git a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift index d93e2ec17..4ab55ccb3 100644 --- a/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift +++ b/shell_integration/MacOSX/NextcloudIntegration/FileProviderUIExt/Locking/LockViewController.swift @@ -7,6 +7,7 @@ import AppKit import FileProvider +import NextcloudCapabilitiesKit import NextcloudFileProviderKit import NextcloudKit import OSLog @@ -76,6 +77,20 @@ class LockViewController: NSViewController { stopIndicatingLoading() } + private func fetchCapabilities(account: Account, kit: NextcloudKit) async -> Capabilities? { + return await withCheckedContinuation { continuation in + kit.getCapabilities(account: account.ncKitAccount) { account, data, error in + guard error == .success, let capabilitiesJson = data?.data else { + self.presentError("Error getting server caps: \(error.errorDescription)") + continuation.resume(returning: nil) + return + } + Logger.lockViewController.info("Successfully retrieved server share capabilities") + continuation.resume(returning: Capabilities(data: capabilitiesJson)) + } + } + } + private func processItemIdentifier(_ itemIdentifier: NSFileProviderItemIdentifier) async { guard let manager = NSFileProviderManager(for: actionViewController.domain) else { fatalError("NSFileProviderManager isn't expected to fail") @@ -168,7 +183,12 @@ class LockViewController: NSViewController { nextcloudVersion: 25, groupIdentifier: "" ) - // guard let capabilities = await fetchCapabilities() else { + guard let capabilities = await fetchCapabilities(account: account, kit: kit), + capabilities.files?.locking != nil + else { + presentError("Server does not have the ability to lock files.") + return + } guard let itemMetadata = await fetchItemMetadata( itemRelativePath: serverPathString, account: account, kit: kit ) else {